#include <unistd.h>
#include <stdio.h>

int main() {
    char *argv[] = {"ls", "-l", "-a", NULL};
    char *envp[] = {"PATH=/bin", NULL};
    
    execve("/bin/ls", argv, envp);
    perror("execve failed");
    return 1;
}

//#include <unistd.h>
//#include <stdio.h>
//#include <sys/wait.h>
//
//int main() {
//    char *argv[] = {"ls", "-l", "-a", NULL};
//    pid_t pid;
//    int status;
//
//    printf("--- execl ---\n");
//    pid = fork();
//    if (pid == 0) {
//        execl("/bin/ls", "ls", "-l", "-a", NULL);
//        perror("execl failed");
//        _exit(1);
//    }
//    wait(&status);
//
//    printf("--- execlp ---\n");
//    pid = fork();
//    if (pid == 0) {
//        execlp("ls", "ls", "-l", "-a", NULL);
//        perror("execlp failed");
//        _exit(1);
//    }
//    wait(&status);
//
//    printf("--- execv ---\n");
//    pid = fork();
//    if (pid == 0) {
//        execv("/bin/ls", argv);
//        perror("execv failed");
//        _exit(1);
//    }
//    wait(&status);
//
//    printf("--- execvp ---\n");
//    pid = fork();
//    if (pid == 0) {
//        execvp("ls", argv);
//        perror("execvp failed");
//        _exit(1);
//    }
//    wait(&status);
//
//    return 0;
//}
//

//#include <unistd.h>
//#include <stdio.h>
//
//int main() {
//    char *argv[] = {"ls", "-l", "-a", NULL};
//    
//    printf("--- execl ---\n");
//    execl("/bin/ls", "ls", "-l", "-a", NULL);
//    
//    printf("--- execlp ---\n");
//    execlp("ls", "ls", "-l", "-a", NULL);
//    
//    printf("--- execv ---\n");
//    execv("/bin/ls", argv);
//    
//    printf("--- execvp ---\n");
//    execvp("ls", argv);
//    
//    perror("exec failed");
//    return 1;
//}
//


//#include <stdio.h>
//#include <stdlib.h>
//#include <unistd.h>
//#include <sys/wait.h>
//
//int main() {
//    pid_t pid = fork();
//    if (pid < 0) {
//        perror("fork");
//        return 1;
//    } else if (pid == 0) { // 子进程
//        printf("child running, pid = %d\n", getpid());
//        sleep(5);
//        exit(1);
//    } else { // 父进程
//        int status;
//        pid_t ret;
//        do {
//            ret = waitpid(pid, &status, WNOHANG);
//            if (ret == 0) {
//                printf("waiting...\n");
//                sleep(1);
//            }
//        } while (ret == 0);
//        
//        if (WIFEXITED(status) && ret == pid) {
//            printf("child exited with code: %d\n",
//                   WEXITSTATUS(status));
//        }
//    }
//    return 0;
//}







//#include <stdio.h>
//#include <stdlib.h>
//#include <sys/wait.h>
//#include <unistd.h>
//
//int main() {
//    pid_t pid = fork();
//
//    if (pid == 0) {
//        // 子进程
//        printf("Child process (PID: %d) running\n", getpid());
//        sleep(2);
//        exit(42);  // 子进程退出码为 42
//    } else if (pid > 0) {
//        // 父进程
//        int status;
//        pid_t child_pid = waitpid(pid, &status, 0);
//
//        if (child_pid == -1) {
//            perror("waitpid failed");
//            exit(1);
//        }
//
//        if (WIFEXITED(status)) {
//            printf("Child %d exited with code %d\n", child_pid, WEXITSTATUS(status));
//        }
//    } else {
//        perror("fork failed");
//        exit(1);
//    }
//
//    return 0;
//}



//#include <stdio.h>
//#include <unistd.h>
//#include <stdlib.h>
//#include <string.h>
//#include<errno.h>
//int main()
//{
// // for(;i<150;i++)
// // {
// //   printf("%d->%s\n",i,strerror(i));
// // }
//  FILE *fp = fopen("log.txt","r");
//  if(fp==NULL) return errno;
//
//  return 0;
//
//}


























//int main() {
//    pid_t pid;
//    
//    printf("Before fork: pid = %d\n", getpid());
//    if ((pid = fork()) == -1) {
//        perror("fork() error");
//        exit(1);
//    }
//    printf("After fork: pid = %d, fork returned %d\n", getpid(), pid);
//    sleep(1);
//    return 0;
//}
